import os
import sys
import importlib.util
import torch

# 获取当前工作目录
current_dir = os.path.dirname(os.path.abspath(__file__))

# 定义要搜索的根目录
model_root_dir = os.path.join(current_dir + "/" + "../", 'model')

# 用于存储导入的模块
imported_modules = {}
# print("current_dir",current_dir)
# print("model_root_dir",model_root_dir)
# 递归遍历目录
for root, dirs, files in os.walk(model_root_dir):
    # print("root",root)
    for file in files:
        # print("file",file)
        if file.endswith('.py'):  # 只处理 Python 文件
            file_path = os.path.join(root, file)
            # 生成唯一的模块名，使用相对路径来区分同名文件
            relative_path = os.path.relpath(file_path, model_root_dir)
            module_name = relative_path.replace(os.sep, '_').replace('.py', '')

            # 动态导入模块
            spec = importlib.util.spec_from_file_location(module_name, file_path)
            # print("spec",spec)
            if spec is not None:
                module = importlib.util.module_from_spec(spec)
                sys.modules[module_name] = module
                spec.loader.exec_module(module)

                # 将模块存储在字典中
                imported_modules[module_name] = module

# 测试导入的模块
# print(imported_modules['InDepthShareU_Net_InDepthShareU_Net'])

# for module_name, module in imported_modules.items():
# print(f"导入的模块: {module_name}")
# print(imported_modules)
# imported_modules['InDepthShareU_Net_InDepthShareU_Net'].U_Net(3,2)

# print("模块中的函数或类:", module)
# 这里可以调用模块中的函数或类，例如：

# if hasattr(module, 'UNet'):
#     tmp2_U_Nets.UNet(3,2)
# print("导入的模块数量:", len(imported_modules))


import NDSNet as nds
import U_Nets
import segNet
import UTNet.model.swin_unet as sw_unet
import patchNet
import SwinTransformer.models.swin_transformer as sw
#
# import InDepthShareU_Net.InDepthShareU_Net as tmp
#
#
#
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")


#
#
#
# 跑不起来的模型
def NDSNet():
    return nds.NDSNet(3, 2).to(device)


# SwinUnet
def SwinUnet():
    return sw_unet.SwinUnet().to(device)


# PSPNet
def PSPNet():
    return patchNet.PSPNet().to(device)


# -------------------------------------------------------------------------

# 能正常运行的模型
# Unet
def UNet():
    return U_Nets.U_Net(3, 2).to(device)


# Unet++
def NestedUNet():
    return U_Nets.NestedUNet(3, 2).to(device)


# SegNet
def SegNet():
    return segNet.SegNet(3, 2).to(device)


# SWIN
def SwinTransformer():
    return sw.SwinTransformer().to(device)


# def InDepthShareU_Net():
#     return imported_modules['InDepthShareU_Net_InDepthShareU_Net'].U_Net(3, 2).to(device)


def tmp2():
    # return U_Nets.U_Net(3,2).to(device)
    return imported_modules['U_Nets_U_Nets'].U_Net(3, 2).to(device)





def InDepthShareU_Net():
    module = imported_modules['InDepthShareU_Net_InDepthShareU_Net']
    # if hasattr(module, 'main'):
    return module.U_Net(3, 2).to(device)  # 调用 main 函数
    # else:
    #     raise ImportError('Module does not have a main function')






def model_UNet_128():
    module = imported_modules['1_UNet_Tue Jul 23 21:47:48 CST 2024_UNet']
    return module.U_Net(3,2)  # 调用 main 函数


def model_SegNet_130():
    module = imported_modules['5_SegNet_Wed Jul 31 21:27:57 CST 2024_SegNet']
    return module.SegNet(3,2)  # 调用 main 函数

def model_UNet_131():
    module = imported_modules['5_UNet_Wed Jul 31 21:42:30 CST 2024_UNet']
    return module.UNet(3,2)  # 调用 main 函数

def model_UNet_132():
    module = imported_modules['5_UNet_Wed Jul 31 21:44:42 CST 2024_UNet']
    return module.UNet(3,2)  # 调用 main 函数

def model_SegNet_133():
    module = imported_modules['5_SegNet_Wed Jul 31 22:35:32 CST 2024_SegNet']
    return module.SegNet(3,2)  # 调用 main 函数

def model_UNet_134():
    module = imported_modules['5_UNet_Wed Jul 31 22:36:07 CST 2024_UNet']
    return module.UNet(3,2)  # 调用 main 函数

def model_UNet_135():
    module = imported_modules['3_UNet_Sat Aug 10 14:48:42 CST 2024_UNet']
    return module.U_Net(3,2)  # 调用 main 函数

def model_UNet_136():
    module = imported_modules['10_UNet_Sat Aug 10 17:43:38 CST 2024_UNet']
    return module.UNet(3,2)  # 调用 main 函数

def model_UNet_137():
    module = imported_modules['3_UNet_Sun Aug 11 12:44:50 CST 2024_UNet']
    return module.UNet(3,2)  # 调用 main 函数


def model_test_139():
    module = imported_modules['3_test_Thu Aug 15 10:14:17 CST 2024_UNet']
    return module.U_Net(3,2)  # 调用 main 函数

def model_UNet_146():
    module = imported_modules['4_U_Net_Fri Aug 16 15:00:08 CST 2024_U_Net']
    return module.U_Net(3,2)  # 调用 main 函数

def model_Unet_test_147():
    module = imported_modules['1_Unet_test_Tue Dec 17 14:45:32 CST 2024_Unet_test']
    return module.Unet_test(3,2)  # 调用 main 函数

def model_UNet512_148():
    module = imported_modules['1_UNet512_Tue Dec 17 18:14:07 CST 2024_UNet512']
    return module.UNet512(3,2)  # 调用 main 函数

def model_UNet512_149():
    #TODO 时间和文件夹时间有误差
    module = imported_modules['1_UNet512_Tue Dec 17 18:34:14 CST 2024_UNet512']
    return module.UNet512(3,2)  # 调用 main 函数

def model_UNet512Test_150():
    module = imported_modules['1_UNet512Test_Wed Dec 18 16:14:43 CST 2024_UNet512Test']
    return module.UNet512Test(3,2)  # 调用 main 函数

def model_UNet_155():
    module = imported_modules['1_UNet_Thu Feb 27 110049 CST 2025_UNet']
    return module.UNet(3,2)  # 调用 main 函数

def model_UNet_156():
    module = imported_modules['1_UNet_Thu Feb 27 125124 CST 2025_UNet']
    return module.UNet(3,2)  # 调用 main 函数

def model_UNet_164():
    module = imported_modules['1_UNet_Fri Feb 28 211248 CST 2025_UNet']
    return module.UNet(3,2)  # 调用 main 函数

def model_UNet_165():
    module = imported_modules['1_UNet_Fri Feb 28 211904 CST 2025_UNet']
    return module.UNet(3,2)  # 调用 main 函数

def model_UNet_166():
    module = imported_modules['1_UNet_Fri Feb 28 212414 CST 2025_UNet']
    return module.UNet(3,2)  # 调用 main 函数

def model_UNet_167():
    module = imported_modules['1_UNet_Fri Feb 28 232717 CST 2025_UNet']
    return module.UNet(3,2)  # 调用 main 函数

def model_UNet_168():
    module = imported_modules['1_UNet_Fri Feb 28 233047 CST 2025_UNet']
    return module.UNet(3,2)  # 调用 main 函数

def model_UNet_169():
    module = imported_modules['1_UNet_Fri Feb 28 233135 CST 2025_UNet']
    return module.UNet(3,2)  # 调用 main 函数

def model_UNet_170():
    module = imported_modules['1_UNet_Fri Feb 28 234800 CST 2025_UNet']
    return module.UNet(3,2)  # 调用 main 函数

def model_UNet_171():
    module = imported_modules['1_UNet_Fri Feb 28 234848 CST 2025_UNet']
    return module.UNet(3,2)  # 调用 main 函数

def model_UNet_172():
    module = imported_modules['1_UNet_Fri Feb 28 234935 CST 2025_UNet']
    return module.UNet(3,2)  # 调用 main 函数

def model_UNet_173():
    module = imported_modules['1_UNet_Fri Feb 28 234957 CST 2025_UNet']
    return module.UNet(3,2)  # 调用 main 函数

def model_UNet_174():
    module = imported_modules['1_UNet_Fri Feb 28 235356 CST 2025_UNet']
    return module.UNet(3,2)  # 调用 main 函数

def model_UNet_175():
    module = imported_modules['1_UNet_Fri Feb 28 235437 CST 2025_UNet']
    return module.UNet(3,2)  # 调用 main 函数

def model_UNet_176():
    module = imported_modules['1_UNet_Fri Feb 28 235603 CST 2025_UNet']
    return module.UNet(3,2)  # 调用 main 函数

def model_UNet_178():
    module = imported_modules['1_UNet_Sat Mar 01 000020 CST 2025_UNet']
    return module.UNet(3,2)  # 调用 main 函数

def model_UNet_179():
    module = imported_modules['1_UNet_Sat Mar 01 000051 CST 2025_UNet']
    return module.UNet(3,2)  # 调用 main 函数

def model_UNet_180():
    module = imported_modules['5_UNet_Sat Mar 01 171140 CST 2025_UNet']
    return module.UNet(3,2)  # 调用 main 函数

def model_UNet1_181():
    module = imported_modules['1_UNet1_Sat Mar 01 183945 CST 2025_UNet1']
    return module.UNet1(3,2)  # 调用 main 函数

def model_UNet1_182():
    module = imported_modules['1_UNet1_Sat Mar 01 184757 CST 2025_UNet1']
    return module.UNet1(3,2)  # 调用 main 函数

def model_UNet1_183():
    module = imported_modules['1_UNet1_Sat Mar 01 194555 CST 2025_UNet1']
    return module.UNet1(3,2)  # 调用 main 函数

def model_UNet1_184():
    module = imported_modules['1_UNet1_Sat Mar 01 194556 CST 2025_UNet1']
    return module.UNet1(3,2)  # 调用 main 函数

def model_UNet_185():
    module = imported_modules['1_UNet_Sat Mar 01 202831 CST 2025_UNet']
    return module.UNet(3,2)  # 调用 main 函数

def model_UNet1_186():
    module = imported_modules['1_UNet1_Sat Mar 01 202858 CST 2025_UNet1']
    return module.UNet1(3,2)  # 调用 main 函数

def model_UNet_187():
    module = imported_modules['1_UNet_Sun Mar 02 112613 CST 2025_UNet']
    return module.UNet(3,2)  # 调用 main 函数

def model_UNet_188():
    module = imported_modules['1_UNet_Sun Mar 02 112840 CST 2025_UNet']
    return module.UNet(3,2)  # 调用 main 函数

def model_UNet_189():
    module = imported_modules['1_UNet_Sun Mar 02 195354 CST 2025_UNet']
    return module.UNet(3,2)  # 调用 main 函数

def model_UNet_192():
    module = imported_modules['1_UNet_Wed Mar 05 171014 CST 2025_UNet']
    return module.UNet(3,2)  # 调用 main 函数

def model_UNet_197():
    module = imported_modules['1_UNet_Sat Mar 08 113246 CST 2025_UNet']
    return module.UNet(3,2)  # 调用 main 函数

def model_ChangeNet_1():
    module = imported_modules['1_ChangeNet_Wed Mar 12 114008 CST 2025_ChangeNet']
    return module.ChangeNet(3,2)  # 调用 main 函数

def model_ChangeNet_2():
    module = imported_modules['1_ChangeNet_Wed Mar 12 114131 CST 2025_ChangeNet']
    return module.ChangeNet(3,2)  # 调用 main 函数

def model_ChangeNet_3():
    module = imported_modules['1_ChangeNet_Thu Mar 13 115106 CST 2025_ChangeNet']
    return module.ChangeNet(3,2)  # 调用 main 函数

def model_ChangeNet_4():
    module = imported_modules['1_ChangeNet_Thu Mar 13 115555 CST 2025_ChangeNet']
    return module.ChangeNet(3,3)  # 调用 main 函数

def model_ChangeNet_5():
    module = imported_modules['1_ChangeNet_Thu Mar 13 115649 CST 2025_ChangeNet']
    return module.ChangeNet(3,2)  # 调用 main 函数

def model_DUNet_6():
    module = imported_modules['1_DUNet_Thu Mar 13 151654 CST 2025_DUNet']
    return module.DUNet(3,2)  # 调用 main 函数

def model_DUNet_7():
    module = imported_modules['1_DUNet_Thu Mar 13 152348 CST 2025_DUNet']
    return module.DUNet(3,2)  # 调用 main 函数

def model_DUNet_8():
    module = imported_modules['1_DUNet_Thu Mar 13 210019 CST 2025_DUNet']
    return module.DUNet(3,2)  # 调用 main 函数

def model_DUNet_9():
    module = imported_modules['13_DUNet_Fri Mar 14 055426 CST 2025_DUNet']
    return module.DUNet(3,2)  # 调用 main 函数

def model_UNet_199():
    module = imported_modules['1_UNet_Wed Mar 19 010322 CST 2025_UNet']
    return module.UNet(3,2)  # 调用 main 函数

def model_UNet_201():
    module = imported_modules['1_UNet_Fri Mar 21 222624 CST 2025_UNet']
    return module.UNet(3,2)  # 调用 main 函数

def model_DUNet_12():
    module = imported_modules['1_DUNet_Fri Mar 21 231952 CST 2025_DUNet']
    return module.DUNet(3,2)  # 调用 main 函数

def model_deepLabV3_202():
    module = imported_modules['13_deepLabV3_Fri Mar 21 234740 CST 2025_deepLabV3']
    return module.deepLabV3(3,2)  # 调用 main 函数
